﻿// MT577




using Little.Soldier.SWIFT;
using Little.Soldier.SWIFT.Definition;
using System.ComponentModel;

namespace Little.Soldier.SWIFT.Messages.Category5
{
  public class MT577 : SwiftMessage
  {
    private static SwiftMessageDefinition MessageDefinition;
    private static SwiftTagDefinition U0002;
    private static SwiftTagSubItemDefinition U0003;
    private static SwiftTagSubItemDefinition U0004;
    private static SwiftTagSubItemDefinition U0005;
    private static SwiftTagDefinition U0006;
    private static SwiftTagSubItemDefinition U0007;
    private static SwiftTagDefinition U0008;
    private static SwiftTagSubItemDefinition U000E;
    private static SwiftTagChoiceDefinition U000F;
    private static SwiftTagDefinition U0010;
    private static SwiftTagSubItemDefinition U0011;
    private static SwiftTagSubItemDefinition U0012;
    private static SwiftTagDefinition U0013;
    private static SwiftTagSubItemDefinition U0014;
    private static SwiftTagDefinition U0015;
    private static SwiftTagSubItemDefinition U0016;
    private static SwiftTagSubItemDefinition U0017;
    private static SwiftTagDefinition U0018;
    private static SwiftTagSubItemDefinition U0019;
    private static SwiftTagSubItemDefinition U001A;
    private static SwiftTagDefinition U001B;
    private static SwiftTagSubItemDefinition U001C;
    private static SwiftTagSubItemDefinition U001D;
    private static SwiftTagDefinition U001E;
    private static SwiftTagSubItemDefinition U001F;
    private static SwiftTagSubItemDefinition U007F;
    private static SwiftTagSubItemDefinition U0080;
    private static SwiftTagDefinition U0081;
    private static SwiftTagDefinition U0082;

    [Description("Page Number/Continuation Indicator")]
    public MT577.Tag28 PageNumberContinuationIndicator_28
    {
      get
      {
        return new MT577.Tag28((SwiftElement) this, 0, (SwiftDefinitionElement) MT577.U0002);
      }
    }

    [Description("Page Number/Continuation Indicator")]
    public MT577.Tag28 Tag28_PageNumberContinuationIndicator
    {
      get
      {
        return this.PageNumberContinuationIndicator_28;
      }
    }

    [Description("Transaction Reference Number")]
    public Tag20 TransactionReferenceNumber_20
    {
      get
      {
        return new Tag20((SwiftElement) this, 0, (SwiftDefinitionElement) MT577.U0006);
      }
    }

    [Description("Transaction Reference Number")]
    public Tag20 Tag20_TransactionReferenceNumber
    {
      get
      {
        return this.TransactionReferenceNumber_20;
      }
    }

    [Description("Related Reference")]
    public Tag21 RelatedReference_21
    {
      get
      {
        return new Tag21((SwiftElement) this, 0, (SwiftDefinitionElement) MT577.U0008);
      }
    }

    [Description("Related Reference")]
    public Tag21 Tag21_RelatedReference
    {
      get
      {
        return this.RelatedReference_21;
      }
    }

    [Description("Safekeeping Account")]
    public Tag83A SafekeepingAccount_83A
    {
      get
      {
        return new Tag83A((SwiftElement) this, 0, (SwiftDefinitionElement) MT577.U0010);
      }
    }

    [Description("Safekeeping Account")]
    public Tag83A Tag83A_SafekeepingAccount
    {
      get
      {
        return this.SafekeepingAccount_83A;
      }
    }

    [Description("Safekeeping Account")]
    public Tag83C SafekeepingAccount_83C
    {
      get
      {
        return new Tag83C((SwiftElement) this, 0, (SwiftDefinitionElement) MT577.U0013);
      }
    }

    [Description("Safekeeping Account")]
    public Tag83C Tag83C_SafekeepingAccount
    {
      get
      {
        return this.SafekeepingAccount_83C;
      }
    }

    [Description("Safekeeping Account")]
    public Tag83D SafekeepingAccount_83D
    {
      get
      {
        return new Tag83D((SwiftElement) this, 0, (SwiftDefinitionElement) MT577.U0015);
      }
    }

    [Description("Safekeeping Account")]
    public Tag83D Tag83D_SafekeepingAccount
    {
      get
      {
        return this.SafekeepingAccount_83D;
      }
    }

    [Description("Statement Period")]
    public Tag67A StatementPeriod_67A
    {
      get
      {
        return new Tag67A((SwiftElement) this, 0, (SwiftDefinitionElement) MT577.U0018);
      }
    }

    [Description("Statement Period")]
    public Tag67A Tag67A_StatementPeriod
    {
      get
      {
        return this.StatementPeriod_67A;
      }
    }

    [Description("Quantity of Securities")]
    public Tag35A QuantityOfSecurities_35A
    {
      get
      {
        return new Tag35A((SwiftElement) this, 0, (SwiftDefinitionElement) MT577.U001B);
      }
    }

    [Description("Quantity of Securities")]
    public Tag35A Tag35A_QuantityOfSecurities
    {
      get
      {
        return this.QuantityOfSecurities_35A;
      }
    }

    [Description("Identification of Securities")]
    public Tag35B IdentificationOfSecurities_35B
    {
      get
      {
        return new Tag35B((SwiftElement) this, 0, (SwiftDefinitionElement) MT577.U001E);
      }
    }

    [Description("Identification of Securities")]
    public Tag35B Tag35B_IdentificationOfSecurities
    {
      get
      {
        return this.IdentificationOfSecurities_35B;
      }
    }

    [Description("Certificate Number(s)")]
    public Tag35F CertificateNumbers_35F
    {
      get
      {
        return new Tag35F((SwiftElement) this, 0, (SwiftDefinitionElement) MT577.U0081);
      }
    }

    [Description("Certificate Number(s)")]
    public Tag35F Tag35F_CertificateNumbers
    {
      get
      {
        return this.CertificateNumbers_35F;
      }
    }

    [Description("Sender to Receiver Information")]
    public Tag72 SenderToReceiverInformation_72
    {
      get
      {
        return new Tag72((SwiftElement) this, 0, (SwiftDefinitionElement) MT577.U0082);
      }
    }

    [Description("Sender to Receiver Information")]
    public Tag72 Tag72_SenderToReceiverInformation
    {
      get
      {
        return this.SenderToReceiverInformation_72;
      }
    }

    public MT577()
      : base(true)
    {
    }

    public MT577(SwiftMessage message)
      : base(message)
    {
    }

    internal override SwiftMessageDefinition MsgDefinition()
    {
      return MT577.MessageDefinition;
    }

    protected override void InitSwiftMessageDefinition()
    {
      MT577.MessageDefinition = new SwiftMessageDefinition("MT577", "Statement of Numbers");
      MT577.U0002 = new SwiftTagDefinition("PageNumberContinuationIndicator_28", "Page Number/Continuation Indicator");
      MT577.U0002.TagName = ":28:";
      MT577.U0003 = new SwiftTagSubItemDefinition("PageNumber", "Page Number");
      MT577.U0002.Elements.Add((SwiftDefinitionElement) MT577.U0003);
      MT577.U0004 = new SwiftTagSubItemDefinition("Indicator", "Indicator");
      MT577.U0004.Mandatory = false;
      MT577.U0005 = new SwiftTagSubItemDefinition("Indicator_1", "Indicator");
      MT577.U0004.Elements.Add((SwiftDefinitionElement) MT577.U0005);
      MT577.U0002.Elements.Add((SwiftDefinitionElement) MT577.U0004);
      MT577.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT577.U0002);
      MT577.U0006 = new SwiftTagDefinition("TransactionReferenceNumber_20", "Transaction Reference Number");
      MT577.U0006.TagName = ":20:";
      MT577.U0007 = new SwiftTagSubItemDefinition("Reference", "Reference");
      MT577.U0006.Elements.Add((SwiftDefinitionElement) MT577.U0007);
      MT577.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT577.U0006);
      MT577.U0008 = new SwiftTagDefinition("RelatedReference_21", "Related Reference");
      MT577.U0008.TagName = ":21:";
      MT577.U0008.Mandatory = false;
      MT577.U000E = new SwiftTagSubItemDefinition("Reference", "Reference");
      MT577.U0008.Elements.Add((SwiftDefinitionElement) MT577.U000E);
      MT577.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT577.U0008);
      MT577.U000F = new SwiftTagChoiceDefinition("Choice", "");
      MT577.U000F.Mandatory = false;
      MT577.U000F.Multiple = true;
      MT577.U0010 = new SwiftTagDefinition("SafekeepingAccount_83A", "Safekeeping Account");
      MT577.U0010.TagName = ":83A:";
      MT577.U0011 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT577.U0011.Mandatory = false;
      MT577.U0010.Elements.Add((SwiftDefinitionElement) MT577.U0011);
      MT577.U0012 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT577.U0010.Elements.Add((SwiftDefinitionElement) MT577.U0012);
      MT577.U000F.Elements.Add((SwiftDefinitionElement) MT577.U0010);
      MT577.U0013 = new SwiftTagDefinition("SafekeepingAccount_83C", "Safekeeping Account");
      MT577.U0013.TagName = ":83C:";
      MT577.U0014 = new SwiftTagSubItemDefinition("Account", "");
      MT577.U0013.Elements.Add((SwiftDefinitionElement) MT577.U0014);
      MT577.U000F.Elements.Add((SwiftDefinitionElement) MT577.U0013);
      MT577.U0015 = new SwiftTagDefinition("SafekeepingAccount_83D", "Safekeeping Account");
      MT577.U0015.TagName = ":83D:";
      MT577.U0016 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT577.U0016.Mandatory = false;
      MT577.U0015.Elements.Add((SwiftDefinitionElement) MT577.U0016);
      MT577.U0017 = new SwiftTagSubItemDefinition("NameAndAddress", "NameAndAddress");
      MT577.U0015.Elements.Add((SwiftDefinitionElement) MT577.U0017);
      MT577.U000F.Elements.Add((SwiftDefinitionElement) MT577.U0015);
      MT577.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT577.U000F);
      MT577.U0018 = new SwiftTagDefinition("StatementPeriod_67A", "Statement Period");
      MT577.U0018.TagName = ":67A:";
      MT577.U0019 = new SwiftTagSubItemDefinition("Date1", "Date1");
      MT577.U0018.Elements.Add((SwiftDefinitionElement) MT577.U0019);
      MT577.U001A = new SwiftTagSubItemDefinition("Date2", "Date2");
      MT577.U001A.Mandatory = false;
      MT577.U0018.Elements.Add((SwiftDefinitionElement) MT577.U001A);
      MT577.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT577.U0018);
      MT577.U001B = new SwiftTagDefinition("QuantityOfSecurities_35A", "Quantity of Securities");
      MT577.U001B.TagName = ":35A:";
      MT577.U001B.Mandatory = false;
      MT577.U001C = new SwiftTagSubItemDefinition("Type", "Type");
      MT577.U001B.Elements.Add((SwiftDefinitionElement) MT577.U001C);
      MT577.U001D = new SwiftTagSubItemDefinition("Quantity", "Quantity");
      MT577.U001B.Elements.Add((SwiftDefinitionElement) MT577.U001D);
      MT577.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT577.U001B);
      MT577.U001E = new SwiftTagDefinition("IdentificationOfSecurities_35B", "Identification of Securities");
      MT577.U001E.TagName = ":35B:";
      MT577.U001F = new SwiftTagSubItemDefinition("IdentificationOfSecurity", "Identification of Security");
      MT577.U001F.Mandatory = false;
      MT577.U007F = new SwiftTagSubItemDefinition("IdentificationOfSecurity_1", "Identification of Security");
      MT577.U001F.Elements.Add((SwiftDefinitionElement) MT577.U007F);
      MT577.U001E.Elements.Add((SwiftDefinitionElement) MT577.U001F);
      MT577.U0080 = new SwiftTagSubItemDefinition("DescriptionOfSecurity", "Description of Security");
      MT577.U0080.Mandatory = false;
      MT577.U001E.Elements.Add((SwiftDefinitionElement) MT577.U0080);
      MT577.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT577.U001E);
      MT577.U0081 = new SwiftTagDefinition("CertificateNumbers_35F", "Certificate Number(s)");
      MT577.U0081.TagName = ":35F:";
      MT577.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT577.U0081);
      MT577.U0082 = new SwiftTagDefinition("SenderToReceiverInformation_72", "Sender to Receiver Information");
      MT577.U0082.TagName = ":72:";
      MT577.U0082.Mandatory = false;
      MT577.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT577.U0082);
    }

    public class Tag28 : SwiftTagWrapper
    {
      public string Value
      {
        get
        {
          return this.GetValue();
        }
        set
        {
          this.SetValue("28", value);
        }
      }

      internal Tag28(SwiftElement parent, int index, SwiftDefinitionElement definition)
        : base(parent, index, definition)
      {
      }
    }
  }
}
